home *** CD-ROM | disk | FTP | other *** search
/ 64'er / 64ER_CD.iso / 89xx / 8907a.d64 / declare 88 src (.txt) < prev    next >
Encoding:
Commodore BASIC  |  1995-03-30  |  21.0 KB  |  590 lines

  1. 0 POKE53280,11:POKE53281,15:PRINTCHR$(144):END
  2. 10 SYS9*4096:.OPT OO:*=$C000
  3. 20 ; *** PROGRAMMTEILADRESSEN ***
  4. 29 PRG0A = $7300:PRG0E = $73FF
  5. 30 PRG1A = $C000:PRG1E = $C3FF
  6. 34 PRG3A = $8000:PRG3E = $83FF
  7. 35 PRG4A = $D400:PRG4E = $D7FF
  8. 150 LO = 167:HI = 168:LO2 = 169:HI2 = 170
  9. 155 STRPT = 178;179:COUNTER = 180;181
  10. 156 STARTADR = 250
  11. 160 DATA = $83:REM = $8F:PRINT = $99
  12. 180 PNT2 = $49:CHAROUT = $AB47
  13. 200 CHAR = 8:COUNT = 11:PNT = $71
  14. 230 QUOTE = $22:FLAG = 15:TXTPTR = $7A
  15. 260 BUFFER = $200:TABLE = $A09E
  16. 265 READY = $A474:CKCOM = $AEFD
  17. 270 SPEICHER = $7000:CASSETTE = 828
  18. 301 ; NEUE COMMANDS
  19. 303 CMDSTART = $CC:CMDLAST = $D1:FUNEND = $FF
  20. 375 ; *********************
  21. 376 ; *** PROGRAMMTEIL1 ***
  22. 378 ; *** INTERPRETER NEU ***
  23. 440 TOKENREAD LDX TXTPTR:LDY #4:STY FLAG
  24. 450 JSR DOWN:JSR NEXTCHAR:PHA:JSR UP:PLA:JMP $A609
  25. 570 ; FUER VERGLEICH MIT TABLE AUFTAUCHEN
  26. 580 L575 JSR UP:JSR COMPARE:JMP DOWN; BACK TO NEXTCHAR
  27. 2000 ; *** NEUE LIST-ROUTINE ***
  28. 2030 TOKENLIST BPL OUT
  29. 2033 BIT FLAG:BMI OUT;QUOT-MODUS
  30. 2035 CMP #$FF:BEQ OUT
  31. 2040 CMP #$CC:BCS NEWLIST
  32. 2050 JMP $A724:OUT JMP $A6F3
  33. 2055 NEWLIST CMP CMDEND:BCC L2060
  34. 2058 SBC FUNSTART:CLC:ADC CMDEND
  35. 2060 L2060 SEC:SBC #$CB:TAX:STY PNT2
  36. 2065 LDA #<(NEWTAB-1):STA LO:LDA #>(NEWTAB-1):STA HI:LDY #0:BEQ L2085
  37. 2080 LOOP INY:BNE L2080:INC HI:L2080 LDA (LO),Y:BPL LOOP
  38. 2085 L2085 DEX:BNE LOOP
  39. 2090 FOUND INY:BNE L2095:INC HI
  40. 2095 L2095 LDA (LO),Y:BMI OLDEND:JSR CHAROUT:BNE FOUND
  41. 2100 OLDEND JMP $A6EF
  42. 3000 ; *** COMMANDS AUSFUEHREN ***
  43. 3020 TYPFLAG = 13:CHRGET = $73:CHR(null)T = CHRGET+6
  44. 3030 EXECOLD = $A7ED:INTER = $A7AE:FUNKTOLD = $AE8D
  45. 3040 GETTERM = $AEF1:CHECKNUM = $AD8D
  46. 3050 ; *** PROCEDURES ***
  47. 3110 NEWCMD JSR CHRGET:JSR TESTCMD:JMP INTER
  48. 3120 TESTCMD CMP #CMDSTART:BCC OLDCMD:CMP CMDEND:BCC CMD2
  49. 3130 OLDCMD JSR CHR(null)T:JMP EXECOLD
  50. 3140 CMD2 SEC:SBC #CMDSTART:ASL:TAY
  51. 3145 LDA #<CMDTAB:STA LO:LDA #>CMDTAB:STA HI
  52. 3150 INY:LDA (LO),Y:DEY:PHA:LDA (LO),Y:PHA:JMP CHRGET
  53. 3155 ; *** FUNCTIONS ***
  54. 3160 NEWFUN LDA #0:STA TYPFLAG:JSR CHRGET:CMP FUNSTART:BCC OLDFUN
  55. 3170 CMP #FUNEND:BCC FUN2
  56. 3180 OLDFUN JSR CHR(null)T:JMP FUNKTOLD
  57. 3190 FUN2 SEC:SBC FUNSTART:ASL:CLC:ADC FUNTABANF:STA JUMPIND+1
  58. 3192 LDA FUNTABANF+1:ADC #0:STA JUMPIND+2
  59. 3194 JSR CHRGET:JSR GETTERM:JSR JUMPIND:JMP CHECKNUM
  60. 3210 JUMPIND JMP ($FFFF)
  61. 3300 ; *****************************
  62. 3302 ; *** PROCEDURE DEKLARIEREN ***
  63. 3312 PROCEDURE LDA #1:JSR DECLARE
  64. 3314 PROC2 INC CMDEND
  65. 3320 LDA FUNSTRANF:CLC:ADC STRLEN:STA FUNSTRANF:BCC L3338:INC FUNSTRANF+1
  66. 3338 L3338 LDA FUNTABANF:CLC:ADC #2:STA FUNTABANF:BCC L3342:INC FUNTABANF+1
  67. 3342 L3342 RTS
  68. 3400 ; ****************************
  69. 3402 ; *** FUNKTION DEKLARIEREN ***
  70. 3411 FUNCTION LDA #0:JSR DECLARE
  71. 3420 FUNCT2 DEC FUNSTART:RTS
  72. 3510 ; ******************************
  73. 3511 ; ** FUN/PROC/PACK NAME LESEN **
  74. 3520 TITLE JSR STREVL:STA TITLEN:STY TITPOINT+1:STX TITPOINT
  75. 3525 JSR $E200:STX DEVICE:LDA #0:STA ADRESSEN:RTS
  76. 3530 ; ******************************
  77. 3531 ; TEST, OB CMD DEKL. WERDEN KANN
  78. 3532 ; NAME IM BUFFER
  79. 3535 DEKLTEST JSR COMPARE:BNE ERROR19; REDEFINITION
  80. 3540 ; TESTEN, OB NUMMER FREI
  81. 3542 LDA FUNSTART:CMP CMDEND:BEQ ERROR16:RTS
  82. 3550 ERROR16 LDX #16; OUT OF (null) :.BYTE $2C
  83. 3552 ERROR19 LDX #19:JMP ERROR; REDIM ERROR
  84. 3598 ; ********************************
  85. 3599 ; ** PROC/FUN LADEN/ASSEMBLIEREN *
  86. 3600 DECLARE STA TYPE:JSR TITLE:JSR DEKLTEST
  87. 3601 JSR VORB; CKCOM/OPFILE
  88. 3615 JSR INPSTRING;DOWN
  89. 3630 JSR DECL2; HEADER UND PRGTEIL
  90. 3693 ; ** COMMAND (TITLE) EINBAUEN
  91. 3695 LDA TITPOINT:STA STRPT:LDA TITPOINT+1:STA STRPT+1
  92. 3698 LDA TITLEN:STA STRLEN:JSR EINBAUEN:JMP UP
  93. 3700 ; ********************************
  94. 3701 ; ** ZEICHENKETTE NACH (STRPT)  **
  95. 3703 ; **   ENDE MIT DOPPELPUNKT    **
  96. 3704 ; ** KEHRT IN DOWN-MODE ZURUECK **
  97. 3710 INPSTRING JSR UP:LDA DEVICE:BNE L3716
  98. 3712 JSR STREVL:JMP DOWN; DEVICE 0
  99. 3716 L3716 LDA COMMEND:STA STRPT:LDA COMMEND+1:STA STRPT+1:LDY #0
  100. 3718 ; *** HEADER MUSS GEHOLT WERDEN
  101. 3720 L3720 LDA DEVICE:CMP #1:BEQ L3725
  102. 3721 ; *** .ASC VON DISK  **
  103. 3722 JSR $E112:BIT 144:BVC L3728
  104. 3723 L3723 LDX #11:JMP ERROR; SYNTAX
  105. 3724 ; *** .ASC IM SPEICHER ABGELEGT **
  106. 3725 L3725 LDA (STARTADR),Y
  107. 3728 L3728 STA (STRPT),Y:INY:BEQ L3723:CMP #":":BNE L3720
  108. 3730 TYA:STA STRLEN
  109. 3732 L3732 CLC:ADC STARTADR:STA STARTADR:BCC L3734:INC STARTADR+1
  110. 3734 L3734 JMP DOWN
  111. 3777 ; ********************************
  112. 3778 ; * STRING AUSWERTEN, STRPT SETZEN
  113. 3780 STREVL JSR $AD9E:JSR $B6A3:STA STRLEN:STY STRPT+1:STX STRPT:RTS
  114. 4000 ; ************************
  115. 4001 ; *** PACK DEKLARIEREN ***
  116. 4012 PACK JSR TITLE:LDA COMMEND:STA PRGANF:LDA COMMEND+1:STA PRGANF+1
  117. 4035 LDA #2:STA TYPE:JSR VORB; CKCOM/OPFILE
  118. 4105 JSR INPSTRING;DOWN
  119. 4110 JSR PAC2; HEADER,PRGTEIL HOLEN:JMP UP
  120. 4160 ; ** AUS PAC2 FUER DEKLTEST AUFTAUCHEN
  121. 4165 L4165 JSR UP:JSR DEKLTEST:JMP DOWN; BACK NACH PAC2
  122. 4200 ; *****************************
  123. 4201 ; ** HEADER-READ VORBEREITEN **
  124. 4202 VORB LDA DEVICE:BEQ L4218
  125. 4204 CMP #8:BEQ L4214
  126. 4206 ; *** DEVICE 1, AUS SPEICHER - STARTADR HOLEN
  127. 4208 JSR CKCOM:JSR $AD8A:JSR $BC9B
  128. 4210 LDA $65:STA STARTADR:LDA $64:STA STARTADR+1:RTS
  129. 4212 ; ** NUR DEVICE 8
  130. 4214 L4214 JMP OPFILE;RTS
  131. 4216 ; ** NUR DEVICE 0
  132. 4218 L4218 JMP CKCOM;RTS
  133. 4300 ; ******************************
  134. 4301 ; * UP,PROGRAMMTEIL HOLEN,DOWN *
  135. 4310 INPRG JSR UP:LDA DEVICE:BEQ L4316:CMP #1:BEQ L4320
  136. 4313 ; ** NUR DEVICE 8
  137. 4314 JMP INFILE;LOAD,DOWN,ANPASSEN
  138. 4315 ; ** NUR DEVICE 0
  139. 4316 L4316 JMP ASMPRG; ASSEMBLIEREN,DOWN
  140. 4318 ; *** NUR DEVICE 1 - NACH COMMEND KOPIEREN ,DOWN, ANPASSEN
  141. 4320 L4320 LDY #0:LDA (STARTADR),Y:STA ENDADR:INY:LDA (STARTADR),Y:STA ENDADR+1
  142. 4322 LDA #2:JSR L3732; STARTADRESSE+ACCU, DOWN
  143. 4326 ; *** 4328-4336 DOWN-MODE ***
  144. 4328 L4328 LDA COMMEND:STA LO:LDA COMMEND+1:STA HI
  145. 4329 LDA STARTADR:STA LO2:LDA STARTADR+1:STA HI2:LDY #0
  146. 4330 L4330 LDA (LO2),Y:STA (LO),Y
  147. 4332 INC LO2:BNE L4333:INC HI2
  148. 4333 L4333 INC LO:BNE L4334:INC HI
  149. 4334 L4334 SEC:LDA LO2:SBC ENDADR:LDA HI2:SBC ENDADR+1:BCC L4330
  150. 4336 JMP ADRANP
  151. 5101 ; ********************************
  152. 5102 ; STRING (STRPT) MIT TABLES VERGL.
  153. 5103 ;ERGEBNIS A>0 COUNT-NR DES TOKENS
  154. 5104 ;        A=0 TOKEN NICHT DEFINIERT
  155. 5110 ; *** MIT ROM-TABLE ***
  156. 5120 COMPARE LDA #0:STA COUNT
  157. 5122 LDA #>TABLE:STA HI:LDA #<TABLE:STA LO:JSR COMPSUB:BNE L5274
  158. 5130 ; *** MIT NEWTAB ***
  159. 5140 COMPARE2 LDA #>NEWTAB:STA HI:LDA #<NEWTAB:STA LO
  160. 5142 LDA #CMDSTART:STA COUNT
  161. 5220 ; ********************************
  162. 5222 ; ** MIT TABLE (LO/HI) VERGLEICHEN
  163. 5230 COMPSUB LDA #0:STA COMPLEN
  164. 5245 L5245 LDY #0
  165. 5248 L5248 LDA (STRPT),Y:SEC:SBC (LO),Y:INY:AND #$FF:BEQ L5248
  166. 5250 CMP #$80:BEQ L5270
  167. 5251 INC COUNT:DEY:DEY
  168. 5252 L5252 INY:LDA (LO),Y:BPL L5252:INY:LDA (LO),Y:BEQ L5272
  169. 5255 TYA:CLC:ADC LO:STA LO:BCC L5245:INC HI:BNE L5245
  170. 5270 L5270 ORA COUNT:STY COMPLEN
  171. 5272 L5272 STA COUNT
  172. 5274 L5274 RTS
  173. 5500 ; ********************
  174. 5501 ; *** MEMORY-DUMP  ***
  175. 5504 MEMORY LDA #<NEWTAB:STA LO:LDA #>NEWTAB:STA HI:LDY #0
  176. 5506 L5506 LDA (LO),Y:BEQ L5520:BPL L5512
  177. 5510 L5510 AND #127:JSR $F1CA:LDA #13
  178. 5512 L5512 JSR $F1CA:INY:BNE L5506:INC HI:BNE L5506
  179. 5518 ; *** ANFANG UND ENDE DES PROCEDURESPEICHERS ***
  180. 5520 L5520 LDA COMMANDS+1:LDX COMMANDS:JSR $BDCD
  181. 5522 LDA #"-":JSR $F1CA
  182. 5524 LDA COMMEND+1:LDX COMMEND:JMP $BDCD
  183. 5600 ; *******************************
  184. 5601 ; *** ASCII-ZAHL IM BUFFER -> INT
  185. 5602 ; *** AUS DOWN, ENDE MIT DOWN
  186. 5604 BUFFINT JSR UP:LDA $7A:PHA:LDA $7B:PHA
  187. 5606 LDA STRPT+1:STA $7B:LDA STRPT:STA $7A:JSR $0079:JSR $BCF3:JSR $BC9B
  188. 5608 LDA $7A:STA STRPT:LDA $7B:STA STRPT+1
  189. 5610 PLA:STA $7B:PLA:STA $7A:JMP DOWN
  190. 6200 ; ********************************
  191. 6201 ; ** PROGRAMMTEIL VON DISK LESEN *
  192. 6202 ; ** UND ADRESSEN ANPASSEN       *
  193. 6216 INFILE LDA COMMEND:STA LO:LDA COMMEND+1:STA HI
  194. 6220 BASIN JSR $FFCF:LDY #0:STA (LO),Y
  195. 6224 INC LO:BNE L6226:INC HI
  196. 6226 L6226 BIT 144:BVC BASIN
  197. 6240 ; *** FILE SCHLIESSEN ***
  198. 6244 L6244 JSR CLOSE:JSR DOWN:JMP ADRANP
  199. 6300 ; ***************************
  200. 6301 ; *** OBJECT FILE OEFFNEN ***
  201. 6302 ; FILENAME KOMPLETTIEREN
  202. 6303 OPFILE LDA #1:JSR $FFC3;FILE1 SCHLIESSEN
  203. 6304 LDA #1:LDX DEVICE:LDY #2:JSR $FFBA:LDY #0:LDX #0
  204. 6306 L6306 LDA (STRPT),Y:STA CASSETTE,Y:INY:CPY STRLEN:BNE L6306
  205. 6308 L6308 LDA TYPE:CMP #2:BEQ L6312
  206. 6309 ; *** NAME.OBJ ***
  207. 6310 LDA OBJSTR,X:BNE L6314
  208. 6311 ; *** NAME.PAC ***
  209. 6312 L6312 LDA PACSTR,X
  210. 6314 L6314 STA CASSETTE,Y:INY:INX:CPX #4:BNE L6308
  211. 6315 ; ** FILE OPEN **
  212. 6316 L6316 TYA:LDX #<CASSETTE:LDY #>CASSETTE:JSR $FFBD:JSR $FFC0
  213. 6320 ; ** ERROR CONTROL #2,8,15 **
  214. 6322 LDA #2:LDX DEVICE:LDY #15:JSR $FFBA
  215. 6324 LDA #0:JSR $FFBD:JSR $FFC0:LDX #2:JSR $FFC6
  216. 6326 JSR $FFCF:CMP #48:BEQ L6328:LDX #4:JMP ERROR; FILE NOT FOUND
  217. 6328 L6328 JSR $FFCC:LDX #1:JSR $FFC6; FILE1
  218. 6330 JSR $FFCF:STA STARTADR:JSR $FFCF:STA STARTADR+1:RTS
  219. 6410 ; *************************
  220. 6411 ; *** CLOSE FILES #1,#2 ***
  221. 6412 CLOSE JSR $FFCC:LDA #1:JSR $FFC3:LDA #2:JSR $FFC3:JMP $FD15
  222. 6420 ; *****************************
  223. 6422 ; *** ERROR AUS RAM EBENE 2 ***
  224. 6424 ERROR JSR UP:TXA:PHA:JSR CLOSE:PLA:TAX:JMP $A43A
  225. 6500 ; *****************************
  226. 6501 ; *** SYSTEM INITIALISIEREN ***
  227. 6510 INIT JSR DOWN:JMP L16504
  228. 6600 ; *****************************
  229. 6601 ; *** SPEICHERKONFIGURATION ***
  230. 6610 DOWN SEI:LDA 1:AND #248:STA 1:RTS
  231. 6612 UP LDA 1:ORA #7:STA 1:CLI:RTS
  232. 7450 ; *****************************
  233. 7451 ; *** PROGRAMM ASSEMBLIEREN ***
  234. 7452 ; STARTADRESSE HINTERLEGEN
  235. 7454 ASMPRG TSX:STX VAR:JSR DOWN:JSR L16304
  236. 7460 JMP $9000
  237. 7461 ; ASSEMBLER NORMALISIEREN
  238. 7462 BACK JSR DOWN:JSR L16312
  239. 7469 ; WIEDER IN ASM SPRINGEN
  240. 7470 JSR $9DDB:TSX:CPX VAR:BNE L7472:JMP DOWN; RTS
  241. 7472 L7472 JMP READY
  242. 7500 ; ** LEERBYTES BIS VARIABLENANF.
  243. 9000 ; ************************
  244. 9001 ; *** VARIABLENBEREICH ***
  245. 9002 *=$C480 ; 48 BYTES - $C4B0
  246. 9020 TYPE .BYTE $FF
  247. 9025 COMMANDS .WORD SPEICHER:COMMEND .WORD SPEICHER
  248. 9304 CMDEND .BYTE CMDLAST; +5 (PROC+FUN+IN+MEM+PAC)
  249. 9305 FUNSTART .BYTE FUNEND
  250. 9307 FUNSTRANF .WORD FUNSTRTAB
  251. 9308 FUNSTREND .WORD FUNSTRTAB
  252. 9310 FUNTABANF .WORD FUNTAB
  253. 9312 FUNTABEND .WORD FUNTAB
  254. 9315 ENDADR .WORD 00   ; ALTES PROGRAMM
  255. 9317 PRGANF .WORD 00   ; DES NEUEN
  256. 9318 PRGEND .WORD 00   ; PROGRAMMS
  257. 9368 TITPOINT .WORD 00:TITLEN .BYTE 0
  258. 9369 STRLEN .BYTE 0
  259. 9371 COMPLEN .BYTE 0:INSANF .WORD 00
  260. 9372 ADRESSEN .BYTE 00:USADR .WORD 00
  261. 9373 DEVICE .BYTE 00:VAR .BYTE 00
  262. 9375 OBJSTR .ASC ".OBJ"
  263. 9376 PACSTR .ASC ".PAC"
  264. 10000 ; *********************
  265. 10001 ; *** PROGRAMMTEIL2 ***
  266. 10002 ; *********************
  267. 10100 *=$8000
  268. 10350 ; ***************************
  269. 10352 ; *** INTERPRETER PART II ***
  270. 10380 NEXTCHAR LDA BUFFER,X:BPL NORMAL:INX:CMP #$FF:BNE NEXTCHAR:DEX
  271. 10410 ; * ALLE ZEICHEN <128 UND $FF=(null) *
  272. 10440 NORMAL BIT FLAG:BVS TAKCHAR;DATAZEILE
  273. 10490 CMP #"?":BEQ CHR63
  274. 10560 ; *** AUF TOKENS TESTEN ***
  275. 10570 CHECKTOKEN STY PNT:STX TXTPTR
  276. 10575 STX STRPT:LDA #2:STA STRPT+1:JSR L575; COMP MIT TABLES
  277. 10576 LDA COMPLEN:CLC:ADC TXTPTR:TAX:LDY PNT
  278. 10580 LDA COUNT:BEQ NOTFOUND:DEX:CMP CMDEND:BCC TAKCHAR
  279. 10585 SEC:SBC CMDEND:CLC:ADC FUNSTART:BNE TAKCHAR
  280. 10590 ; *******************
  281. 10710 CHR63 LDA #PRINT:BNE TAKCHAR
  282. 10715 ; *******************
  283. 10720 NOTFOUND LDA BUFFER,X
  284. 10730 ; *** ZEICHEN UEBERNEHMEN ***
  285. 10731 ; UND AUF ":",DATA,REM TESTEN
  286. 10740 TAKCHAR INX:INY:STA BUFFER-5,Y
  287. 10760 CMP #0:BEQ ENDE; * ZEILENENDE *
  288. 10770 ; ** TEST AUF HOCHKOMMA **
  289. 10771 CMP #QUOTE:BEQ CHR34
  290. 10780 ; ** TEST AUF ":" **
  291. 10781 CMP #":":BNE L10791:LDA #0:STA FLAG
  292. 10790 ; ** TEST AUF DATA **
  293. 10791 L10791 CMP #DATA:BNE L10801:LDA #64:STA FLAG
  294. 10800 ; ** TEST AUF REM **
  295. 10801 L10801 CMP #REM:BNE NEXTCHAR
  296. 10810 ; ******************
  297. 10845 CHR34 STA CHAR
  298. 10850 ; *** TEXT UEBERNEHMEN ***
  299. 10860 COPYTEXT LDA BUFFER,X:INY:INX:STA BUFFER-5,Y
  300. 10870 CMP CHAR:BEQ NEXTCHAR:CMP #0:BNE COPYTEXT
  301. 10875 ENDE RTS; ZEILENENDE
  302. 12900 ; *********************
  303. 12901 ; ** FILE BEARBEITEN **
  304. 12910 L12910 LDX #11:JMP ERROR; SYNTAX
  305. 12920 ; *** HEADER LESEN ***
  306. 12921 ; *** "NUR BEI PACK:"
  307. 12922 ; ** "PROCEDURE ODER FUNCTION"
  308. 12975 PAC2 JSR COMPARE2:SEC:SBC #CMDSTART:CMP #2:BCS L12910
  309. 12990 EOR #1:STA TYPE:LDA COMPLEN:JSR ADDSTRP:JSR NEXTCHR:CPX #32:BNE L12910
  310. 13004 JSR L4165; DEKLTEST UP:LDY #$FF
  311. 13010 ; *** STRLEN BESTIMMEN ***
  312. 13012 L13012 INY:LDA (STRPT),Y:BEQ L12910:CMP #QUOTE:BEQ L12910
  313. 13014 CMP #",":BEQ L13020:CMP #":":BNE L13012
  314. 13020 L13020 STY STRLEN:JSR EINBAUEN:LDA STRLEN:JSR ADDSTRP
  315. 13030 LDA TYPE:BEQ L13030:JSR PROC2:BNE L13040:L13030 JSR FUNCT2
  316. 13040 L13040 LDA PRGANF:CLC:ADC #3:STA PRGANF:BCC L13045:INC PRGANF+1
  317. 13045 L13045 JSR NEXTCHR:CPX #",":BEQ PAC2:CPX #":":BNE L12910
  318. 13060 LDA DEVICE:BEQ DECL2:JSR INPSTRING
  319. 13100 ; *************************
  320. 13102 ; * 'PROGRAM' ODER 'USING'
  321. 13104 ; * "PACK" UND SOLO-DEKLARATIONEN
  322. 13108 DECL2 JSR TXVERGL; X 0=US,1=PRG:TXA:BNE L13210
  323. 13110 JSR NEXTCHR:CPX #32:BNE L13452
  324. 13115 ; ** USING-STATEMENT BEARBEITEN
  325. 13120 L13120 JSR COMPARE2:BEQ L13450
  326. 13124 LDA COMPLEN:JSR ADDSTRP
  327. 13126 JSR NEXTCHR:CPX #",":BNE L13452
  328. 13128 JSR USINGADR:JSR BUFFINT
  329. 13135 LDA USADR:CLC:ADC $65:PHA:LDA USADR+1:ADC $64:PHA:INC ADRESSEN
  330. 13140 JSR NEXTCHR:CPX #",":BEQ L13120:CPX #":":BNE L13452; SYNTAX
  331. 13142 LDA DEVICE:BEQ L13144:JSR INPSTRING
  332. 13143 ; ** HEADER-TEST AUF "PROGRAM:"
  333. 13144 L13144 JSR TXVERGL:TXA:BEQ L13452
  334. 13200 ; ** "PROGRAM:" -> PRGTEIL LADEN
  335. 13210 L13210 JSR NEXTCHR:CPX #":":BNE L13452
  336. 13212 LDA COMMEND:STA PRGANF:LDA COMMEND+1:STA PRGANF+1:JSR INPRG
  337. 13220 ; * GGF. USING-ADRESSEN EINSETZEN
  338. 13221 ; * USINGAUSW NICHT MIT JSR
  339. 13226 LDA ADRESSEN:BEQ L13230:JMP USINGAUSW; MIT JMP ZURUECK
  340. 13228 ; ** COMMANDS-ENDE SETZEN
  341. 13230 L13230 LDA PRGEND:STA COMMEND:LDA PRGEND+1:STA COMMEND+1:RTS
  342. 13430 ; *********************
  343. 13431 ; ** FEHLERMELDUNGEN **
  344. 13450 L13450 LDX #17:.BYTE $2C; UNDEF'D STATEMENT
  345. 13452 L13452 LDX #11:JMP ERROR; SYNTAX
  346. 13500 ; *******************************
  347. 13501 ; * (STRPT) MIT 'USING','PROGRAM'
  348. 13502 ; * VERGL. X -> 0=USING,1=PROGRAM
  349. 13510 TXVERGL LDA #>USTAB:STA HI:LDA #<USTAB:STA LO:LDA #0:STA COUNT
  350. 13520 JSR COMPSUB:BEQ L13452
  351. 13524 AND #1:TAX:LDA COMPLEN:BNE ADDSTRP;RTS
  352. 13600 ; ******************************
  353. 13601 ; * NEXT CHAR BEI (STRPT) -> X *
  354. 13602 ; * UND STRPT INCREMENT
  355. 13605 NEXTCHR LDY #0:LDA (STRPT),Y:TAX:LDA #1
  356. 13608 ; *** AKKU ZU STRPT ADDIEREN **
  357. 13610 ADDSTRP CLC:ADC STRPT:STA STRPT:BCC L13612:INC STRPT+1
  358. 13612 L13612 RTS
  359. 13708 ; ****************************
  360. 13709 ; * COMMAMD (STRP) EINBAUEN **
  361. 13710 ; * STRINGTABELLE SCHIEBEN
  362. 13711 ; * FUNSTREND + LEN
  363. 13712 EINBAUEN LDX STRLEN:LDA FUNSTRANF:STA INSANF:LDA FUNSTRANF+1:STA INSANF+1
  364. 13714 LDA FUNSTREND:STA LO:CLC:ADC STRLEN:STA FUNSTREND
  365. 13716 LDA FUNSTREND+1:STA HI:ADC #0:STA FUNSTREND+1:JSR INSERT
  366. 13720 ; *** STRING IN NEWTAB ***
  367. 13721 LDY #0
  368. 13722 L13722 LDA (STRPT),Y:STA (LO),Y:INY:CPY STRLEN:BNE L13722
  369. 13724 DEY:LDA (LO),Y:ORA #$80:STA (LO),Y
  370. 13738 ; * ADRESSENTABELLE SCHIEBEN
  371. 13739 ; * FUNTABEND + 2
  372. 13740 LDX #2:LDA FUNTABANF:STA INSANF:LDA FUNTABANF+1:STA INSANF+1
  373. 13742 LDA FUNTABEND:STA LO:CLC:ADC #2:STA FUNTABEND
  374. 13750 LDA FUNTABEND+1:STA HI:ADC #0:STA FUNTABEND+1:JSR INSERT
  375. 13778 ; *** ANF.ADR IN TABELLE ***
  376. 13779 ; *** PROCS    ADR=ANF-1 ***
  377. 13780 LDY #0:SEC:LDA PRGANF:SBC TYPE:STA (LO),Y:INY
  378. 13784 LDA PRGANF+1:SBC #0:STA (LO),Y:RTS
  379. 14725 ; *******************************
  380. 14732 ; ** USING-ADRESSE NACH USADR  **
  381. 14733 ; IN COUNT USING-TOKEN-NR
  382. 14740 USINGADR LDA COUNT:SBC #CMDSTART:ASL A:TAY
  383. 14742 LDA CMDEND:CLC:SBC COUNT
  384. 14750 ; PROC -> CARRY SET -> ADRESSE+1
  385. 14752 ; FUNC -> CARRY CLR -> ADRESSE+0
  386. 14770 ; * TAB-ADRESSE +CARRY -> USADR *
  387. 14772 LDA #<CMDTAB:STA LO:LDA #>CMDTAB:STA HI
  388. 14773 LDA (LO),Y:ADC #0:STA USADR
  389. 14774 INY:LDA (LO),Y:ADC #0:STA USADR+1:RTS
  390. 14800 ; *****************************
  391. 14801 ; * PROGRAMMTEIL VON DISK     *
  392. 14802 ; * TEIL2 - ADRESSEN ANPASSEN *
  393. 14845 ADRANP LDA COMMEND:STA COUNTER:LDA COMMEND+1:STA COUNTER+1
  394. 14850 ; ** PRGLEN (A/Y)= HI/LO-PRGANF
  395. 14852 LDA LO:STA PRGEND:SEC:SBC PRGANF:TAX;PRGLEN-LO
  396. 14854 LDA HI:STA PRGEND+1:SBC PRGANF+1:TAY;PRGLEN-HI
  397. 14860 ; ** ENDADR=STARTADR+PRGLEN (A/Y)
  398. 14862 TXA:CLC:ADC STARTADR:STA ENDADR
  399. 14864 TYA:ADC STARTADR+1:STA ENDADR+1
  400. 14900 ; *******************************
  401. 14902 ; ** ABSOLUTE ADRESSEN SUCHEN ***
  402. 14903 ; ** BIS UNBRAUCHBARES ZEICHEN **
  403. 14904 ; ** Z.B. $FF **
  404. 14910 ADAPT LDY #0:LDA (COUNTER),Y:CMP #$FF:BEQ L4924:TAX:DEY
  405. 14911 L14911 INY:TXA:AND MASKTAB,Y:CMP BITTAB,Y:BNE L14911
  406. 14914 LDA LENTAB,Y:CMP #3:BNE L4918:PHA:JSR ABSOLUT:PLA
  407. 14918 L4918 CLC:ADC COUNTER:STA COUNTER:BCC L4920:INC COUNTER+1
  408. 14920 L4920 SEC:SBC PRGEND:LDA COUNTER+1:SBC PRGEND+1:BCC ADAPT
  409. 14924 L4924 RTS
  410. 14950 ; *** ABSOLUTE ADR < STARTADRESSE
  411. 14954 ABSOLUT LDY #1:SEC:LDA (COUNTER),Y:SBC STARTADR
  412. 14956 INY:LDA (COUNTER),Y:SBC STARTADR+1:BCC L4988
  413. 14965 ; *** ABS.ADR > ENDADRESSE
  414. 14970 LDY #1:SEC:LDA ENDADR:SBC (COUNTER),Y
  415. 14972 INY:LDA ENDADR+1:SBC (COUNTER),Y:BCC L4988
  416. 14980 ; *** ABS.ADR. ANPASSEN ***
  417. 14982 L4982 LDY #1:LDA (COUNTER),Y:SEC:SBC STARTADR:TAX; LO
  418. 14984 INY:LDA (COUNTER),Y:SBC STARTADR+1:PHA; HI
  419. 14986 DEY:TXA:CLC:ADC PRGANF:STA (COUNTER),Y
  420. 14988 INY:PLA:ADC PRGANF+1:STA (COUNTER),Y:L4988 RTS
  421. 14995 ; *****************************
  422. 14996 ; **  USING-PLAETZE SUCHEN    *
  423. 14997 ; ** ADRESSEN AUS STACK HOLEN *
  424. 15001 ; **  UND EINSETZEN           *
  425. 15002 USINGAUSW TSX:TXA:CLC:ADC ADRESSEN:ADC ADRESSEN:TAX:TXS
  426. 15004 LDA PRGANF:STA COUNTER:LDA PRGANF+1:STA COUNTER+1
  427. 15005 L15005 LDY #0:LDA (COUNTER),Y:INY:AND (COUNTER),Y:CMP #$FF:BEQ ADREIN
  428. 15008 INC COUNTER:BNE L15010:INC COUNTER+1
  429. 15010 L15010 SEC:LDA COUNTER:SBC PRGEND:LDA COUNTER+1:SBC PRGEND+1:BCC L15005
  430. 15015 ; ** KEIN PLATZ FUER USING-ADR **
  431. 15020 LDX #13:JMP ERROR; OUT OF DATA ERROR
  432. 15028 ; ** ADR AUS STACK-BEREICH HOLEN
  433. 15030 ADREIN LDA $0100,X:DEY:STA (COUNTER),Y
  434. 15032 INY:DEX:LDA $0100,X:STA (COUNTER),Y:DEX
  435. 15034 DEC ADRESSEN:BNE L15005:JMP L13230; PRAKTISCH RTS
  436. 15600 ; *** PLATZ SCHAFFEN ***
  437. 15601 ; ** IM X-REG ANZAHL ***
  438. 15602 ; ** VON INSANF BIS LO/HI **
  439. 15603 INSERT STX VAR
  440. 15605 L5605 LDY #0:LDA (LO),Y:LDY VAR:STA (LO),Y
  441. 15610 SEC:LDA INSANF:SBC LO:LDA INSANF+1:SBC HI:BCS L5620
  442. 15615 DEC LO:LDA LO:CMP #$FF:BNE L5605:DEC HI:BNE L5605
  443. 15620 L5620 RTS
  444. 16500 ; *****************************
  445. 16501 ; *** SYSTEM INITIALISIEREN ***
  446. 16504 L16504 LDA #CMDLAST:STA CMDEND:LDA #FUNEND:STA FUNSTART
  447. 16506 LDA #<FUNSTRTAB:STA FUNSTRANF:STA FUNSTREND
  448. 16507 LDA #>FUNSTRTAB:STA FUNSTRANF+1:STA FUNSTREND+1
  449. 16510 LDA #<FUNTAB:STA FUNTABANF:STA FUNTABEND
  450. 16511 LDA #>FUNTAB:STA FUNTABANF+1:STA FUNTABEND+1
  451. 16515 LDA COMMANDS:STA COMMEND:LDA COMMANDS+1:STA COMMEND+1
  452. 16518 LDA #0:STA FUNTAB:STA FUNTAB+1:STA FUNSTRTAB:STA FUNSTRTAB+1:JMP UP
  453. 17050 ; *** DISASS-DATEN ***
  454. 17051 ; BYTES PRO BEFEHL $00 - $FF
  455. 17052 .BYTE $FF
  456. 17060 MASKTAB .BYTE %00001100;$XC,XD,XE,XF
  457. 17061 .BYTE %11111111;$20
  458. 17062 .BYTE %10011111;$00,40,60
  459. 17063 .BYTE %00001000;$X0-X7
  460. 17064 .BYTE %00001101;$X8,XA
  461. 17065 .BYTE %00011101;HI 2X+LO 9,B
  462. 17066 .BYTE %11011111;$9B,BB
  463. 17067 .BYTE %00011101;HI(2X+1)+LO 9,B
  464. 17070 BITTAB .BYTE %00001100
  465. 17071 .BYTE %00100000
  466. 17072 .BYTE %00000000
  467. 17073 .BYTE %00000000
  468. 17074 .BYTE %00001000
  469. 17075 .BYTE %00001001
  470. 17076 .BYTE %10011011
  471. 17077 .BYTE %00011001
  472. 17080 LENTAB .BYTE 3,3,1,2,1,2,1,3
  473. 18300 ; *****************************
  474. 18301 ; *** PROGRAMM ASSEMBLIEREN ***
  475. 18302 ; STARTADRESSE HINTERLEGEN
  476. 18304 L16304 LDA COMMEND:STA $902E:LDA COMMEND+1:STA $9032
  477. 18307 ; ASM VERAENDERN
  478. 18308 LDA #$2C:STA $9620
  479. 18309 LDA #$4C:STA $986C:LDA #>BACK:STA $986E:LDA #<BACK:STA $986D:JMP UP
  480. 18311 ; ASM NORMALISIEREN
  481. 18312 L16312 LDA #$A2:STA $9620
  482. 18313 LDA #$20:STA $986C:LDA #$9D:STA $986E:LDA #$DB:STA $986D
  483. 18314 ; ENDADRESSE BESORGEN
  484. 18315 LDA $4F:STA PRGEND:LDA $50:STA PRGEND+1
  485. 18316 JMP UP
  486. 28600 *= $C400
  487. 28601 ; CMDTAB+FUNTAB < 128BYTES, MAX. 51 EINTRAEGE -> BIS $CC7F
  488. 28602 ; *** ADRESSENTABELLE ***
  489. 28702 CMDTAB .WORD PROCEDURE-1
  490. 28703 .WORD FUNCTION-1
  491. 28704 .WORD PACK-1
  492. 28705 .WORD MEMORY-1
  493. 28706 .WORD INIT-1
  494. 28720 FUNTAB .WORD 00
  495. 28730 ; $C480 VARIABLENSPEICHER 48 BYTES
  496. 28739 *=$C4B0
  497. 28750 USTAB .ASC "USIN[199]"
  498. 28752 .ASC "PROGRA[205]"
  499. 28754 .BYTE 00
  500. 28798 ; **** STRINGTABELLE ***
  501. 28800 NEWTAB .ASC "PROCEDUR[197]"
  502. 28801 .ASC "FUNCTIO[206]"
  503. 28802 .ASC "PAC[203]"
  504. 28803 .ASC "MEMOR[217]"
  505. 28804 .ASC "INI[212]"
  506. 28820 FUNSTRTAB .WORD 00
  507. 39110 *=$304:.BYTE <TOKENREAD,>TOKENREAD
  508. 39120 *=$306:.BYTE <TOKENLIST,>TOKENLIST
  509. 39130 *=$308:.BYTE <NEWCMD,>NEWCMD
  510. 39140 *=$30A:.BYTE <NEWFUN,>NEWFUN
  511. 40500 ; ****** PROGRAMMTEIL 2 ********
  512. 40501 ; *** NACH $D400 UEBERTRAGEN ***
  513. 40510 *=$7000; 28672
  514. 40511 ; ADRESSEN IN PRGTEIL1 AENDERN
  515. 40514 LDA #<PRG3A:STA STARTADR:LDA #>PRG3A:STA STARTADR+1
  516. 40516 LDA #<PRG3E:STA ENDADR:LDA #>PRG3E:STA ENDADR+1
  517. 40520 LDA #<PRG1A:STA COUNTER:LDA #>PRG1A:STA COUNTER+1
  518. 40522 LDA #<PRG1E:STA PRGEND:LDA #>PRG1E:STA PRGEND+1
  519. 40530 LDA #<PRG4A:STA PRGANF:LDA #>PRG4A:STA PRGANF+1
  520. 40535 JSR DOWN:JSR ADAPT:JSR DOWN
  521. 40600 ; PRGTEIL3 NACH DESTINATION
  522. 40602 LDA #<PRG3A:STA LO:LDA #>PRG3A:STA HI
  523. 40604 LDA #<PRG4A:STA LO2:LDA #>PRG4A:STA HI2:LDX #4:LDY #$FF:JSR TRANSFER
  524. 40619 ; ADRESSEN IN PRGTEIL3 AENDERN
  525. 40624 LDA #<PRG3A:STA STARTADR:LDA #>PRG3A:STA STARTADR+1
  526. 40626 LDA #<PRG3E:STA ENDADR:LDA #>PRG3E:STA ENDADR+1
  527. 40630 LDA #<PRG4A:STA COUNTER:STA PRGANF:LDA #>PRG4A:STA COUNTER+1:STA PRGANF+1
  528. 40632 LDA #<PRG4E:STA PRGEND:LDA #>PRG4E:STA PRGEND+1
  529. 40645 JSR DOWN:JSR ADAPT:JMP UP
  530. 42001 ; *** ALLES RUNTERKOPIEREN ***
  531. 44000 ; *** PROGRAMMTEILE SAMMELN ***
  532. 44001 ; *** TEIL2 BEI $D400 ***
  533. 44004 *=$7200;29184
  534. 44030 JSR DOWN:LDY #0:STY 2
  535. 44032 L44032 LDA COPYTAB,Y:STA LO
  536. 44034 LDA COPYTAB+1,Y:STA HI
  537. 44036 LDA COPYTAB+2,Y:STA LO2
  538. 44038 LDA COPYTAB+3,Y:STA HI2
  539. 44040 LDA COPYTAB+4,Y:TAX
  540. 44042 LDA COPYTAB+5,Y:TAY
  541. 44044 JSR TRANSFER:LDA 2:CLC:ADC #6:STA 2:TAY:CMP #30:BNE L44032
  542. 44050 ; *** TEIL0 ANPASSEN ***
  543. 44054 LDA #<PRG0A:STA STARTADR:LDA #>PRG0A:STA STARTADR+1
  544. 44056 LDA #<PRG0E:STA ENDADR:LDA #>PRG0E:STA ENDADR+1
  545. 44060 LDA #<MID0:STA COUNTER:LDA #>MID0:STA COUNTER+1
  546. 44062 LDA #$FF:STA PRGEND:LDA #8:STA PRGEND+1
  547. 44070 LDA #0:STA PRGANF:LDA #8:STA PRGANF+1
  548. 44075 JSR ADAPT:JMP UP
  549. 50000 *=$7300
  550. 50001 ; *** ENDPROGRAMM ***
  551. 50002 ; *** 40 BYTES $0800-0827 ***
  552. 50003 .BYTE 0,34,8,196,7,158,32,50
  553. 50004 .BYTE 48,56,56,44,51,50,55,54
  554. 50006 .BYTE 56,32,66,89,32,87,79,76
  555. 50008 .BYTE 70,71,65,78,71,32,77,65
  556. 50010 .BYTE 89,00,00,00,00,00,00,00
  557. 50020 ; *** PROGRAMM VERTEILEN  AB $0828 **
  558. 50025 SEI:LDA 1:AND #248:STA 1:LDY #0:STY 2
  559. 50032 L50032 LDA COPYTAB,Y:STA LO2
  560. 50034 LDA COPYTAB+1,Y:STA HI2
  561. 50036 LDA COPYTAB+2,Y:STA LO
  562. 50038 LDA COPYTAB+3,Y:STA HI
  563. 50040 LDA COPYTAB+4,Y:TAX
  564. 50042 LDA COPYTAB+5,Y:TAY
  565. 50044 JSR TRANSFER:LDA 2:CLC:ADC #6:STA 2:TAY:CMP #24:BNE L50032
  566. 50070 ; *** VEKTOREN SETZEN ***
  567. 50080 LDA #<TOKENREAD:STA $0304:LDA #>TOKENREAD:STA $0305
  568. 50082 LDA #<TOKENLIST:STA $0306:LDA #>TOKENLIST:STA $0307
  569. 50084 LDA #<NEWCMD:STA $0308:LDA #>NEWCMD:STA $0309
  570. 50086 LDA #<NEWFUN:STA $030A:LDA #>NEWFUN:STA $030B
  571. 50090 LDA 1:ORA #7:STA 1:CLI
  572. 50095 ; ** ANF.ADR DES PROCEDURESPEICHERS ABLEGEN ***
  573. 50100 JSR CKCOM:JSR $AD8A:JSR $BC9B
  574. 50101 LDA $65:STA COMMANDS:STA COMMEND:LDA $64:STA COMMANDS+1:STA COMMEND+1
  575. 50102 ; ** BASIC ENDE  $37/38 ODER ANF-ADR PROCEDURESP. **
  576. 50103 CMP $38:BCS L50106
  577. 50104 STA $34:STA $36:STA $38:LDA $65:STA $33:STA $35:STA $37
  578. 50106 L50106 JSR $A644; NEW:JMP $A7AE
  579. 50200 ; *** COPY ROUTINE ***
  580. 50204 TRANSFER LDA (LO),Y:STA (LO2),Y:DEY:CPY #$FF:BNE TRANSFER
  581. 50206 INC HI:INC HI2:DEX:BNE TRANSFER:RTS
  582. 50300 ; *** COPYTAB ***
  583. 50302 COPYTAB .WORD $C000,$0900:.BYTE 4,$FF
  584. 50304 .WORD $D400,$0D00:.BYTE 4,$FF
  585. 50306 .WORD $C400,$1100:.BYTE 1,12
  586. 50308 .WORD $C480,$1110:.BYTE 1,$80
  587. 50310 .WORD $7300,$0800:.BYTE 1,$FF
  588. 50312 MID0 = $0828
  589. 59999 .END:END
  590.